"""
我们上面知道了，日志可以输出到文件中，也可以根据需要调整日志输出的格式。

但还有个问题，我们输出到文件中之后，就无法再输出到控制台中，这肯定不是我们想要的
"""
# logger

"""
我们上面使用的时候，大多都是直接使用 logging
但是这样的话, 有个问题, 就是这个是通用的logging.
更多的时候, 我们需要使用 不同 的logging, 所以我们可以使用 logger, 来实例化不同的 logging
"""
# import logging
#
# logging.basicConfig(format="%(asctime)s|%(levelname)s|%(filename)s|%(lineno)s|%(message)s", level=logging.DEBUG)
#
# logger = logging.getLogger(__name__)  # 使用时, 必须要传入一个参数来指定logger的名字, 并且每个logger的名字都应该不同
#
# logger.debug("test")

# handler
"""
它们将日志分发到不同的目的地。

可以是文件、标准输出、邮件、或者通过socket、http等协议发送到任何地方
"""
import logging
# 输出到控制台的handler
# 我们设置了StreamHandler之后，就不需要logging.basicConfig来设置日志级别了
# sh = logging.StreamHandler()
#
#
# # 输出到文件的handler
# fh = logging.FileHandler(filename)

# Formatter
# import logging
# formatter = logging.Formatter("%(asctime)s|%(levelname)s|%(filename)s|%(lineno)s|%(message)s")


# 三者联用

import logging
import time

logger = logging.getLogger("test")

logger.setLevel(logging.DEBUG)

sh = logging.StreamHandler()  # 定义输出到控制台的handler
fh = logging.FileHandler(filename=f"./{time.strftime('%Y%m%d%H%M%S')}.log", encoding="utf-8")  # 定义输出到文件的handler
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s - %(lineno)s - %(message)s")  # 定义输出格式

# 分别给两个handler设置格式
sh.setFormatter(formatter)
fh.setFormatter(formatter)

# 最后将这两个handler设置到logger身上
logger.addHandler(sh)
logger.addHandler(fh)


logger.debug("测试输出")